using System;
using System.Collections.Generic;
using UD.GRAL.Entity;
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data.Common;
using System.Data;
using UD.Utilities.Exceptions;

namespace UD.GRAL.DataAccess
{
    public class TipoCursoDAL : GeneralDAL
    {
        public TipoCursoDAL()
        {
        }
        public int InsertarTipoCurso(TipoCurso pTipoCurso)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_TipoCurso_Insertar"))
                {
                    int vResultado;
                    vDataBase.AddOutParameter(vDbCommand, "@IdTipoCurso", DbType.Int32, 18);
                    vDataBase.AddInParameter(vDbCommand, "@CodTipoCurso", DbType.String, pTipoCurso.CodTipoCurso);
                    vDataBase.AddInParameter(vDbCommand, "@NombreTipoCurso", DbType.String, pTipoCurso.NombreTipoCurso);
                    vDataBase.AddInParameter(vDbCommand, "@Estado", DbType.Boolean, pTipoCurso.Estado);
                    vDataBase.AddInParameter(vDbCommand, "@UsuarioCrea", DbType.String, pTipoCurso.UsuarioCrea);
                    vResultado = vDataBase.ExecuteNonQuery(vDbCommand);
                    pTipoCurso.IdTipoCurso = Convert.ToInt32(vDataBase.GetParameterValue(vDbCommand, "@IdTipoCurso").ToString());
                    GenerarLogAuditoria(pTipoCurso, vDbCommand);
                    return vResultado;
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                 throw new GenericException(ex);
            }
        }
        public int ModificarTipoCurso(TipoCurso pTipoCurso)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_TipoCurso_Modificar"))
                {
                    int vResultado;
                    vDataBase.AddInParameter(vDbCommand, "@IdTipoCurso", DbType.Int32, pTipoCurso.IdTipoCurso);
                    vDataBase.AddInParameter(vDbCommand, "@CodTipoCurso", DbType.String, pTipoCurso.CodTipoCurso);
                    vDataBase.AddInParameter(vDbCommand, "@NombreTipoCurso", DbType.String, pTipoCurso.NombreTipoCurso);
                    vDataBase.AddInParameter(vDbCommand, "@Estado", DbType.Boolean, pTipoCurso.Estado);
                    vDataBase.AddInParameter(vDbCommand, "@UsuarioModifica", DbType.String, pTipoCurso.UsuarioModifica);
                    vResultado = vDataBase.ExecuteNonQuery(vDbCommand);
                    GenerarLogAuditoria(pTipoCurso, vDbCommand);
                    return vResultado;
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                 throw new GenericException(ex);
            }
        }
        public int EliminarTipoCurso(TipoCurso pTipoCurso)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_TipoCurso_Eliminar"))
                {
                    int vResultado;
                    vDataBase.AddInParameter(vDbCommand, "@IdTipoCurso", DbType.Int32, pTipoCurso.IdTipoCurso);
                    vResultado = vDataBase.ExecuteNonQuery(vDbCommand);
                    GenerarLogAuditoria(pTipoCurso, vDbCommand);
                    return vResultado;
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                 throw new GenericException(ex);
            }
        }


        public TipoCurso ConsultarTipoCurso(int pIdTipoCurso)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_TipoCurso_Consultar"))
                {
                    vDataBase.AddInParameter(vDbCommand, "@IdTipoCurso", DbType.Int32, pIdTipoCurso);
                    using (IDataReader vDataReaderResults = vDataBase.ExecuteReader(vDbCommand))
                    {
                        TipoCurso vTipoCurso = new TipoCurso();
                        while (vDataReaderResults.Read())
                        {
                            vTipoCurso.IdTipoCurso = vDataReaderResults["IdTipoCurso"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdTipoCurso"].ToString()) : vTipoCurso.IdTipoCurso;
                            vTipoCurso.CodTipoCurso = vDataReaderResults["CodTipoCurso"] != DBNull.Value ? Convert.ToString(vDataReaderResults["CodTipoCurso"].ToString()) : vTipoCurso.CodTipoCurso;
                            vTipoCurso.NombreTipoCurso = vDataReaderResults["NombreTipoCurso"] != DBNull.Value ? Convert.ToString(vDataReaderResults["NombreTipoCurso"].ToString()) : vTipoCurso.NombreTipoCurso;
                            vTipoCurso.Estado = vDataReaderResults["Estado"] != DBNull.Value ? Convert.ToBoolean(vDataReaderResults["Estado"].ToString()) : vTipoCurso.Estado;
                            vTipoCurso.UsuarioCrea = vDataReaderResults["UsuarioCrea"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioCrea"].ToString()) : vTipoCurso.UsuarioCrea;
                            vTipoCurso.FechaCrea = vDataReaderResults["FechaCrea"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaCrea"].ToString()) : vTipoCurso.FechaCrea;
                            vTipoCurso.UsuarioModifica = vDataReaderResults["UsuarioModifica"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioModifica"].ToString()) : vTipoCurso.UsuarioModifica;
                            vTipoCurso.FechaModifica = vDataReaderResults["FechaModifica"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaModifica"].ToString()) : vTipoCurso.FechaModifica;
                        }
                        return vTipoCurso;
                    }
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new GenericException(ex);
            }
        }

        public List<TipoCurso> ConsultarTipoCursos(String pCodTipoCurso, String pNombreTipoCurso, Boolean? pEstado)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_TipoCursos_Consultar"))
                {
                    if(pCodTipoCurso != null)
                         vDataBase.AddInParameter(vDbCommand, "@CodTipoCurso", DbType.String, pCodTipoCurso);
                    if(pNombreTipoCurso != null)
                         vDataBase.AddInParameter(vDbCommand, "@NombreTipoCurso", DbType.String, pNombreTipoCurso);
                    if(pEstado != null)
                         vDataBase.AddInParameter(vDbCommand, "@Estado", DbType.Boolean, pEstado);
                    using (IDataReader vDataReaderResults = vDataBase.ExecuteReader(vDbCommand))
                    {
                        List<TipoCurso> vListaTipoCurso = new List<TipoCurso>();
                        while (vDataReaderResults.Read())
                        {
                                TipoCurso vTipoCurso = new TipoCurso();
                            vTipoCurso.IdTipoCurso = vDataReaderResults["IdTipoCurso"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdTipoCurso"].ToString()) : vTipoCurso.IdTipoCurso;
                            vTipoCurso.CodTipoCurso = vDataReaderResults["CodTipoCurso"] != DBNull.Value ? Convert.ToString(vDataReaderResults["CodTipoCurso"].ToString()) : vTipoCurso.CodTipoCurso;
                            vTipoCurso.NombreTipoCurso = vDataReaderResults["NombreTipoCurso"] != DBNull.Value ? Convert.ToString(vDataReaderResults["NombreTipoCurso"].ToString()) : vTipoCurso.NombreTipoCurso;
                            vTipoCurso.Estado = vDataReaderResults["Estado"] != DBNull.Value ? Convert.ToBoolean(vDataReaderResults["Estado"].ToString()) : vTipoCurso.Estado;
                            vTipoCurso.UsuarioCrea = vDataReaderResults["UsuarioCrea"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioCrea"].ToString()) : vTipoCurso.UsuarioCrea;
                            vTipoCurso.FechaCrea = vDataReaderResults["FechaCrea"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaCrea"].ToString()) : vTipoCurso.FechaCrea;
                            vTipoCurso.UsuarioModifica = vDataReaderResults["UsuarioModifica"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioModifica"].ToString()) : vTipoCurso.UsuarioModifica;
                            vTipoCurso.FechaModifica = vDataReaderResults["FechaModifica"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaModifica"].ToString()) : vTipoCurso.FechaModifica;
                                vListaTipoCurso.Add(vTipoCurso);
                        }
                        return vListaTipoCurso;
                    }
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new GenericException(ex);
            }
        }
    }
}
